package com.lsy.poi.cell.extractor;

import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;

import com.lsy.poi.exception.cell.ExtractorException;

/**
 * <br>上界提取器：适用于 存在 合并单元格 的 情况
 * <br> 
 * <br> 当 本cell 不满足条件时，例如 
 * <br> 1) cell!=null
 * <br> 2) cell!=BLANK
 * <br> 等一些条件( 也可以 自定义 )，则会去 取上一行、相同列 上的 cell 进行提取
 * <br> 
 * <br> 如果 还不满足 条件，则 再次 向上上行 的 相同列 去取 cell
 * 
 */
public class CeilingCellExtractor extends AdaptableCellExtractor {

	@SuppressWarnings("deprecation")
	@Override
	public Object doExtract(XSSFCell cell) throws ExtractorException {
		
		XSSFSheet sheet = cell.getSheet();
		int rowIndex = cell.getRowIndex();
		int cellIndex = cell.getColumnIndex();
		
		while(true) {
			//取上一行、相同列 上的 单元格
			cell = sheet.getRow(rowIndex--).getCell(cellIndex);
			
			//如果不满足条件（默认条件：cell!=null、cell!=BLANK），则 再次 向上上行 去取cell
			if(cell==null) {//cell==null
				continue;
			}else {
				if(cell.getCellType() == CellType.BLANK.getCode()) {//cell==BLANK
					continue;
				}
				Object obj = super.doExtract(cell);
				
				return obj;
			}
		}

	}
}
